/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package biblioteka;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author discovery
 */
public class Aplikacja {
    public static void main(String[] args) throws IOException {
        // TODO code application logic here
        System.out.println("Hello world!");
        
        // 
        Aplikacja app = new Aplikacja();
        
        // Buffer odczytu z klawiatury
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        
        // Tworzenie obiektu biblioteka
        Biblioteka biblioteka = new Biblioteka();
        
        // Dodanie kilku przykładowych książek
        biblioteka.dodajKsiazke("Kevin Mitnick", "Sztuka podstępu", "Naukowa");
        biblioteka.dodajKsiazke("Jacek Majewski", "LPC2000", "Naukowa");
        biblioteka.dodajKsiazke("Julian Dibbell", "LPC1100", "Naukowa");
        
        // Dodanie kilku przykładowych użytkowników
        biblioteka.dodajUzytkownika("Jaromir", "Zielinski");
        biblioteka.dodajUzytkownika("Mieczysława", "Olszewska");
        biblioteka.dodajUzytkownika("Stefcia", "Sobczak");
        biblioteka.dodajUzytkownika("Walenty", "Kowalski");
        biblioteka.dodajUzytkownika("Grzegorz", "Szczepański");
        
        // Wypożyczenie książki
        Uzytkownik u = biblioteka.getUzytkownik("Jaromir", "Zielinski");
        Ksiazka k = biblioteka.getKsiazka("Julian Dibbell", "LPC1100", "Naukowa");

        biblioteka.wypozyczKsiazke(k, u);
        
        // Pętla programu głównego
        while(true) {
            // Wyswietlamy menu aplikacji
            app.wyswietlMenu();
            
            // Czekamy na wybor użytkownika
            String read = reader.readLine();
            
            System.out.print("Wybrana opcja: ");
            int i;
            
            // Reakcja aplikacji na wybraną opcję
            switch(read) {
                case "0":
                    // Wyjście z programu
                    System.out.println("Wyjście z programu");
                    System.exit(0);
                    break;
                    // Wyświetlanie użytkowników systemu
                case "1":
                    System.out.println("Wyświetl użytkowników");
                    biblioteka.wyswietlUzytkownikow();
                    break;
                    // Wyświetlanie wszystkich książek
                case "2":
                    System.out.println("Wyświetl książki");
                    biblioteka.wyswietlKsiazki();
                    break;
                    // Wyświetlanie wszystkich ksiązek wg gatunku
                case "3":
                    System.out.println("Wyświetl książki wg. gatunku");
                    System.out.println("Podaj gatunek książek które chcesz wyświetlić");
                    String gatunek = reader.readLine();
                    biblioteka.wyswietlKsiazki(gatunek);
                    break;
                    // Wypożyczanie książek
                case "4":
                    System.out.println("Wypożycz ksiązkę");
                    System.out.println("Wybierz użytkownika");
                    i = 1;
                    
                    List<Uzytkownik> pomocniczaListaUzytkownikowWypozyczenie = new ArrayList<>();
                    for(Uzytkownik uzytkownik : biblioteka.listaUzytkownikow()) {
                        System.out.println(i + ": " + uzytkownik.getImie() + " " + uzytkownik.getNazwisko());
                        pomocniczaListaUzytkownikowWypozyczenie.add(uzytkownik);
                        i++;
                    }
                    
                    String uzytkownikIdd = reader.readLine();
                    Uzytkownik uzytkownikWypozyczenie = pomocniczaListaUzytkownikowWypozyczenie.get(Integer.parseInt(uzytkownikIdd) - 1);
                    
                    System.out.println("Wybierz książkę");
                    
                    i = 1;
                    
                    List<Ksiazka> pomocniczaListaKsiazekWypozyczenie = new ArrayList<>();
                    for(Ksiazka ksiazka : biblioteka.listaKsiazek()) {
                        if(ksiazka.getCzyWypozyczona() == false) {
                            System.out.println(i + " " + ksiazka.getTytul() + " " + ksiazka.getAutor());
                            pomocniczaListaKsiazekWypozyczenie.add(ksiazka);
                            i++;
                        }
                    }
                    
                    String ksiazkaIdd = reader.readLine();
                    Ksiazka ksiazkaWypozyczenie = pomocniczaListaKsiazekWypozyczenie.get(Integer.parseInt(ksiazkaIdd) - 1);
                    
                    // Wypożyczanie
                    biblioteka.wypozyczKsiazke(ksiazkaWypozyczenie, uzytkownikWypozyczenie);
                    break;
                    // Zwracanie książek
                case "5":
                    System.out.println("Zwróć książkę");
                    i = 1;
                    
                    // Wyświeltamy listę użytkowników z książkami
                    List<Uzytkownik> pomocniczaListaUzytkownikowZwrot = new ArrayList<>();
                    for(Uzytkownik uzytkownik : biblioteka.listaUzytkownikow()) {
                        if(uzytkownik.liczbaWypozyczonychKsiazek() > 0) {
                            System.out.println(i + ": " + uzytkownik.getImie() + " " + uzytkownik.getNazwisko());
                            pomocniczaListaUzytkownikowZwrot.add(uzytkownik);
                        }
                    }
                    
                    String uzytkownikId = reader.readLine();
                    Uzytkownik uzytkownikZwracajacyKsiazke;
                    // Jeżeli uzytkownik wybrał za duży numer z listy uzytkowników to wybiermay ostatniego użytkownika
                    if(Integer.parseInt(uzytkownikId) > pomocniczaListaUzytkownikowZwrot.size()) {
                        uzytkownikZwracajacyKsiazke = pomocniczaListaUzytkownikowZwrot.get(pomocniczaListaUzytkownikowZwrot.size() - 1);
                    } else {
                        uzytkownikZwracajacyKsiazke = pomocniczaListaUzytkownikowZwrot.get(Integer.parseInt(uzytkownikId) - 1);
                    }
                    
                    i = 1;
                    // Wyswietlamy listę wypozyczonych książek
                    List<Ksiazka> pomocniczaListaKsiazekZwrot = new ArrayList<>();
                    System.out.println("Lista książek użytkownika: ");
                    for(Ksiazka ksiazka : uzytkownikZwracajacyKsiazke.listaWypozyczonychKsiazek()) {
                        System.out.println(i + ": " + ksiazka.getTytul() + " " + ksiazka.getAutor());
                        pomocniczaListaKsiazekZwrot.add(ksiazka);
                        i++;
                    }
                    
                    String ksiazkaId = reader.readLine();
                    Ksiazka zwracaKsiazka;
                    if(Integer.parseInt(ksiazkaId) > pomocniczaListaKsiazekZwrot.size()) {
                        zwracaKsiazka = pomocniczaListaKsiazekZwrot.get(pomocniczaListaKsiazekZwrot.size() - 1);
                    } else {
                        zwracaKsiazka = pomocniczaListaKsiazekZwrot.get(Integer.parseInt(ksiazkaId) - 1);
                    }
                    
                    // Na koniec zwracamy książkę do biblioteki
                    biblioteka.zwrocKsiazke(zwracaKsiazka, uzytkownikZwracajacyKsiazke);
                    break;                                
                    // Dodawanie książek
                case "6":
                    System.out.println("Dodaj książkę");
                    
                    System.out.println("Tytuł książki: ");
                    String tytul = reader.readLine();
                    System.out.println("Autor książki: ");
                    String autor = reader.readLine();
                    System.out.println("Gatunek książki: ");
                    gatunek = reader.readLine();
                    
                    // Dodanie ksiązki
                    biblioteka.dodajKsiazke(autor, tytul, gatunek);
                    break;
            }
        }
    }
    
    public void wyswietlMenu() {
        System.out.println("Menu programu:");
        System.out.println("1: Wyświetl użytkowników");
        System.out.println("2: Wyświetl książki");
        System.out.println("3: Wyświetl książki wg. gatunku");
        System.out.println("4: Wypożycz książkę");
        System.out.println("5: Zwróć książkę");
        System.out.println("6: Dodaj książkę");
        System.out.println("0: Wyjście z programu");
        System.out.println("\n");
    }
}
